Interface Segregation Principle (ISP) হলো SOLID ডিজাইন প্যাটার্নগুলোর মধ্যে একটি, যা অবজেক্ট-ওরিয়েন্টেড ডিজাইন এবং সফটওয়্যার প্রকৌশলে গুরুত্বপূর্ণ। ISP অনুযায়ী, একটি ক্লাসের উচিত ছোট, নির্দিষ্ট ইন্টারফেসগুলোর ওপর ভিত্তি করে কাজ করা, বড় এবং জটিল ইন্টারফেসের পরিবর্তে। এর মানে হলো, ক্লাসগুলোর উচিত শুধুমাত্র তাদের জন্য প্রয়োজনীয় মেথডগুলো ব্যবহার করা, বরং অপ্রয়োজনীয় মেথডগুলোর জন্য তাদের ব্যবহার করতে বাধ্য করা উচিত নয়।
ISP এর মূল ধারণা
- জটিলতা কমানো: বড় ইন্টারফেসগুলোর পরিবর্তে ছোট ছোট ইন্টারফেস তৈরি করে কোডের জটিলতা কমানো।
- বৃহৎ ইন্টারফেসের অসুবিধা: বৃহৎ ইন্টারফেসে এমন মেথড অন্তর্ভুক্ত থাকতে পারে যা কিছু ক্লাসের জন্য অপ্রয়োজনীয়। এটি ক্লাসগুলোর মধ্যে অযাচিত সম্পর্ক তৈরি করে এবং ক্লাসের পরিবর্তনকে কঠিন করে তোলে।
- মডিউলার ডিজাইন: ছোট ইন্টারফেসগুলি ডেভেলপারদের জন্য সফটওয়্যারকে বুঝতে, রক্ষণাবেক্ষণ করতে এবং সম্প্রসারণ করতে সহজ করে।
ISP এর উদাহরণ
ধরি, একটি Machine ইন্টারফেস আছে যা print() এবং scan() মেথড অন্তর্ভুক্ত করে:
class Machine:
def print(self):
pass
def scan(self):
pass
এখন, যদি একটি Printer ক্লাস তৈরি করা হয় যা শুধুমাত্র প্রিন্টিংয়ের জন্য কাজ করে, তবে এটি scan() মেথডটিকে অগ্রাহ্য করতে হবে, যা ISP এর লঙ্ঘন। এই ধরনের ডিজাইন রক্ষণাবেক্ষণের জন্য কঠিন হতে পারে।
ISP লঙ্ঘনের উদাহরণ
class Printer(Machine):
def print(self):
print("Printing document...")
def scan(self):
# This method is not applicable for Printer
raise NotImplementedError("This machine cannot scan")
ISP অনুসরণ করার উপায়
ISP অনুসরণ করতে, আমাদের ইন্টারফেসগুলোকে ছোট এবং নির্দিষ্ট করে তৈরি করতে হবে। এর মাধ্যমে আমরা প্রয়োজনীয় ফিচারগুলোর উপর ভিত্তি করে ক্লাস তৈরি করতে পারব। নিচে একটি ISP সমর্থনকারী ডিজাইন দেখানো হলো:
class Printer:
def print(self):
print("Printing document...")
class Scanner:
def scan(self):
print("Scanning document...")
class MultiFunctionMachine(Printer, Scanner):
def print(self):
super().print()
def scan(self):
super().scan()
এখানে Printer এবং Scanner ক্লাস দুটি আলাদা ইন্টারফেস হিসেবে কাজ করছে, এবং একটি MultiFunctionMachine ক্লাস এই দুইটি কার্যকলাপকে একত্রিত করেছে।
ISP এর সুবিধা
- লচিলাতা: ছোট এবং নির্দিষ্ট ইন্টারফেসগুলি কোডকে লচিল করতে সাহায্য করে, কারণ পরিবর্তন বা আপডেট প্রয়োজনে অন্যান্য ক্লাসগুলোর ওপর প্রভাব ফেলতে পারে না।
- স্পষ্টতা: ক্লাসগুলোর জন্য দরকারী এবং প্রয়োজনীয় মেথডগুলোকে আলাদাভাবে চিহ্নিত করা সহজ হয়।
- রক্ষণাবেক্ষণ সুবিধা: সফটওয়্যার ডেভেলপমেন্টে সমস্যা শনাক্ত করা এবং সমাধান করা সহজ হয়।
উপসংহার
Interface Segregation Principle (ISP) একটি গুরুত্বপূর্ণ ডিজাইন প্যাটার্ন, যা কোডের গুণগত মান এবং স্থায়িত্ব বাড়াতে সাহায্য করে। এটি ছোট এবং নির্দিষ্ট ইন্টারফেস ব্যবহার করে জটিলতার অভাব ঘটায় এবং রক্ষণাবেক্ষণ এবং সম্প্রসারণকে সহজ করে। ISP-এর নীতিগুলি অনুসরণ করলে অবজেক্ট-ওরিয়েন্টেড ডিজাইন এবং সফটওয়্যার প্রকল্পগুলি আরও কার্যকরী এবং স্থিতিশীল হয়।
Read more